<?php
namespace app\support;

class Response
{
    /**
     * 成功响应
     *
     * @param mixed $data 响应数据
     * @param string $message 响应信息
     * @param int $code 响应码
     * @return \support\Response
     */
    public static function success($data = null, string $message = 'success', int $code = 0)
    {
        return json([
            'code' => $code,
            'message' => $message,
            'data' => $data
        ]);
    }
    
    /**
     * 失败响应
     *
     * @param string $message 错误信息
     * @param int $code 错误码
     * @param mixed $data 额外数据
     * @return \support\Response
     */
    public static function error(string $message = 'error', int $code = 1, $data = null)
    {
        return json([
            'code' => $code,
            'message' => $message,
            'data' => $data
        ]);
    }
    
    /**
     * 自定义响应
     *
     * @param int $code 响应码
     * @param string $message 响应信息
     * @param mixed $data 响应数据
     * @return \support\Response
     */
    public static function make(int $code, string $message = '', $data = null)
    {
        return json([
            'code' => $code,
            'message' => $message,
            'data' => $data
        ]);
    }
    
    /**
     * 分页数据响应
     *
     * @param mixed $items 分页数据
     * @param string $message 响应信息
     * @param int $code 响应码
     * @return \support\Response
     */
    public static function paginate($items, string $message = 'success', int $code = 0)
    {
        return json([
            'code' => $code,
            'message' => $message,
            'data' => [
                'items' => $items->items(),
                'total' => $items->total(),
                'page' => $items->currentPage(),
                'page_size' => $items->perPage(),
                'last_page' => $items->lastPage()
            ]
        ]);
    }
    
    /**
     * 401未授权响应
     *
     * @param string $message 错误信息
     * @param mixed $data 额外数据
     * @return \support\Response
     */
    public static function unauthorized(string $message = '未授权', $data = null)
    {
        return static::error($message, 401, $data);
    }
    
    /**
     * 403禁止访问响应
     *
     * @param string $message 错误信息
     * @param mixed $data 额外数据
     * @return \support\Response
     */
    public static function forbidden(string $message = '禁止访问', $data = null)
    {
        return static::error($message, 403, $data);
    }
    
    /**
     * 404未找到响应
     *
     * @param string $message 错误信息
     * @param mixed $data 额外数据
     * @return \support\Response
     */
    public static function notFound(string $message = '资源不存在', $data = null)
    {
        return static::error($message, 404, $data);
    }
    
    /**
     * 422参数验证失败响应
     *
     * @param string $message 错误信息
     * @param mixed $data 额外数据
     * @return \support\Response
     */
    public static function validateError(string $message = '参数验证失败', $data = null)
    {
        return static::error($message, 422, $data);
    }
} 